package com.example.springboottest.example.nio;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.CharBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;

public class NIOTest {
    public static void main(String[] args) {
        File f = new File("src/main/java/com/example/springboottest/example/io/redirect/RedirectIn.java");
        try (
                //创建 FilelnputStream ，以该文件输入流创建 FileChannel
                FileChannel inChannel = new FileInputStream(f).getChannel();
                //以文件输出流创建 FileChanne l.用以控制输出
                FileChannel outChannel = new FileOutputStream("src/main/java/com/example/springboottest/example/nio/RedirectIn.bak")
                        .getChannel();
        ) {
            //FileChan nel 里的全部数据映射成 ByteBuff er
            MappedByteBuffer buffer = inChannel.map(FileChannel.MapMode.READ_ONLY, 0, f.length());
            //使用 GBK 的字符集来创建解码器
            Charset charset = Charset.forName("GBK");
            //直接将 buffer 里的数据全部输出
            outChannel.write(buffer);

/**
 //再次调用 buffer clear 方法 复原 limit 、posìtion 的位置
 buffer.clear();
 // 创建解码器 CCharsetDecoder) 对象
 CharsetDecoder decoder = charset.newDecoder();
 // 使用解码器将 ByteBuffer 转换成 CharBuffer
 CharBuffer charBuffer = decoder.decode(buffer);
 // CharBuffer toString 方法可以获取对应 字符串
 System.out.println(charBuffer);
 */
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
